﻿/******************************************************************************
 * 【本类功能概述】                                 					      *
 *  版权所有（C）2017-20XX，米兔网络                                         *
 *  保留所有权利。                                                            *
 ******************************************************************************
 *  作者 : <hughjk>
 *  创建时间:2018年5月3日 14:30:24
 *  文件描述:行为中心
 *****************************************************************************/

using BrainSpace;
using System.Collections.Generic;
using UnityEngine;

public class Brain : MonoBehaviour
{
    public static bool isdebugLog = true;

    public Dictionary<int, Goal> Pool = new Dictionary<int, Goal>();//全部行为

    public Goal OrderGoal;
    public Decision decision = new Decision();//决策中心

    private void Init()
    {
        decision.Init(1, this);
    }

    //外部命令
    public void Receive(Order order)
    {
        decision.Receive(order);
    }

    //创建目标
    public void CreateGoal(Order order)
    {
        if (OrderGoal != null)
        {
            if (OrderGoal.m_data.m_orderData.m_authority <= order.m_authority)
            {
                OrderGoal.BreakOvers();
                OrderGoal = GoalPlant.CreateGoal(order, this, GoalOver);
            }
        }
        else
        {
            OrderGoal = GoalPlant.CreateGoal(order, this, GoalOver);
        }
    }

    public void GoalOver()
    {
    }

    //下一步
    //public void Next(Goal goal = null)
    //{
    //    int id = 0;
    //    if (goal != null)
    //    {
    //        Pool.Remove(goal.m_data.m_id);
    //        goal.Dispose();
    //    }
    //    if (!Pool.ContainsKey(id))
    //    {
    //        var stepss = GoalPlant.CreateGoal(id, this);
    //        Pool.Add(stepss.m_data.m_id, stepss);
    //    }
    //}
    //
    ////打断正在运行的节点并且释放掉
    //public void BreakOvers(params int[] id)
    //{
    //    List<Goal> finList = new List<Goal>();
    //    for (int i = 0; i < id.Length; i++)
    //    {
    //        int cid = id[i];
    //        if (Pool.ContainsKey(cid))
    //        {
    //            if (Pool[cid] != null)
    //            {
    //                finList.Add(Pool[cid]);
    //            }
    //            Pool.Remove(cid);
    //        }
    //    }
    //    for (int i = 0; i < finList.Count; i++)
    //    {
    //        finList[i].BreakOvers();
    //        finList[i].Dispose();
    //    }
    //}
}